package com.shengzai

object Code03BaseCode {
  def main(args: Array[String]): Unit = {
    // 1.变量
    // [修饰符] 变量类型(var/val) 变量名 :变量类型 = 变量值
    // val 修饰常量,相当于是Java中得final

    val name:String ="ShengZai"
    println(name)
    // 修饰词可以不加,但是推荐加
    val names = "a"
    println(names)

    //var 修饰变量
    var num: Int = 200
    num = 100
    println(num)

    // 3.字符串 Scala中的字符串类型，使用的就是Java中的String
    var nameType :String = "李四"
    println(nameType)

    // 格式化输出
    println(s"name：$nameType")

    //多行字符串：用来Spark模式下写sql语句
    val sql1 =
      """
        |select
        |*
        |from
        |emp
        |""".stripMargin
    println(sql1)

    //字符串方法
    var values: String = "1,2,3,4,5,6"
    println(values.split(",")) // 切分后为Java的数组
    println(values.substring(1, 4)) // 字符串截取
    println(values.tail) // 从下标1取以后所有数据
    println(values.take(1)) // 取对应下标数据
    println(values.contains("2")) // 判断是否包含
    println(values.length) // 获取长度

    // 3.数据类型
    val byteData: Byte = 1
    val shortData: Short = 2
    val intData: Int = 2
    val longData: Long = 100L
    val charData: Char = 'a'
    val boolData: Boolean = true
    val float: Float = 1.23F
    val double: Double = 1.23D
    println(s"$byteData,$shortData,$intData,$longData,$charData,$boolData,$float,$double")

    // 任意值对象类型
    // Scala中所有包含值的变量类型 都是AnyVal的子类
    var anyValData :AnyVal = float
    println(anyValData)
    anyValData = intData
    println(anyValData)
    anyValData =double
    println(anyValData)

    //任意引用对象类型
    //Scala中的String是使用Java中的，而Java中的类型为引用类型，引用类型在Scala中为 AnyRef的子类
    var anyRefData:AnyRef = values
    println(anyRefData)

    // 数据类型转换
    // Java的方式
    var strType: String = "23"
    val i: Int = Integer.parseInt(strType)

    // Scala的方式
    println(i.toDouble)
    println(i.toString)

    // 4.运算符
    val a: Int = 10
    val b: Int = 3
    println(a + b)
    println(a - b)
    println(a * b)
    println(a / b)
    println(a % b)

    // 对于字符串做乘法，那么会将当前字符串扩增n倍
    println("10" * 10)
    // *法 实际上是调用 *() 函数进行计算的
    println("*".*(10))

    // 逻辑运算符
    val b1: Boolean = true
    val b2: Boolean = false

    println(b1 & b2) // 取与
    println(b1 | b2) // 取或
    println(b1 ^ b2) // 异或（当给定的两个bool值不一样，那么返回为true,否则为false）
    println(!b1) // 取反










  }

}
